Computer graphics is used in a wide variety of applications, such as in business, science, animation, simulation, computer-aided design, process control, electronic publication, gaming, medical diagnosis, etc. In an effort to portray a more realistic real-world representation, three dimensional objects are transformed into models having the illusion of depth for display onto a two-dimensional computer screen. This is accomplished by using a number of polygons to represent a three-dimensional object. Next, a scan conversion process is used to determine which pixels of a computer display fall within each of the specified polygons. Thereupon, texture is selectively applied to those pixels residing within specified polygons. In addition, hidden or obscured surfaces, which are normally not visible, are eliminated from view. Finally, lighting, shading, shadowing, translucency, and blending effects are applied.
For a high resolution display (1024.times.1024) having over a million pixels, for which values must be generated for each and every pixel, displaying a three-dimensional scene on a computer system is a rather complicated task and requires a tremendous amount of processing power. Furthermore, the computer system must be extremely fast for it to handle dynamic computer graphics for displaying three-dimensional objects that are in motion. In order to simulate motion, the computer system should have a frame rate of at least 30 hertz. In other words, new images should be updated, redrawn and displayed at least thirty times a second. Otherwise, the motion would appear to be jerky and unnatural to the human eye. Indeed, even more processing power is required for interactive computer graphics, whereby 3-D images change in response to a user input (e.g., flight simulation). And as a scene becomes "richer" by adding more details and objects, more processing computation is required to render that scene. It is an extremely complex task for a computer to render millions of pixels in order to process these amazingly complex scenes every three-tenths of a second.
Unfortunately, even though a computer might be powerful enough to render such 3-D scenes, there are practical limitations on the speed or "bandwidth" for transmitting and receiving display information over a network, such as the Internet. Due to this limited bandwidth, computers can only send and receive a relatively small trickle of information. Hence, conveying 3-D image information is excruciatingly slow, time-consuming, and frustrating for the user. As a consequence, displays on the Internet have typically been flat and two-dimensional. There are attempts underway to increase the bandwidth by employing fiber optics, wireless communications, cable networks, satellite systems, etc. However, the throughput for these high speed paths can quickly become overloaded with heavy Internet traffic.
In recognition of the limited bandwidth, a high level programming language, known as Virtual Reality Meta Language (VRML) was developed to more efficiently utilize the existing bandwidth in the transmission of 3-D image information. VRML files are formatted in such a way so that some of the 3-D display information can be intentionally left out. Thereby, VRML files can be transmitted much more quickly. This is made possible by the fact that VRML techniques rely on transmitting instructions as well as data to the user's computer. It is then up to the user's computer system to follow these instructions using its resident graphics engine and library to produce the 3-D images.
Although VRML is widely known, designing a graphics application programming interface (API) to take advantage of the powerful and extensive feature set of VRML is quite demanding. Basically, an API is comprised of a library of commands that allows a programmer to utilize the graphics hardware in a computer. It is important to design an API graphics toolkit which allows developers to readily incorporate dynamic 3D worlds, collaborative design environments, and virtual characters with spatialied and synchronized audio into their World Wide Web applications. Further complicating matters is that it would be highly desirable for such an API to be platform independent, whereby the same API allows vendor-neutral PC, workstation, and supercomputing software developers to create high-quality color images of 3-D objects which are capable of running on any of several different platforms. Hardware companies implement each library call in a way that best utilizes the graphics hardware that they provide. The API should also be designed to be network transparent and operating-system independent (i.e., capable of running on X Windows, Microsoft Windows NT.TM. and Windows 95.TM., OS/2,.TM. MacOS.TM., Irix OS.TM., etc.).
In designing the platform-independent API, proper and careful attention must be directed in the selection of which features and attributes are to be included (e.g., geometric morphing, view culling, levels of detail, 3-D audio, texture mapping, modeling, transformation, color, NURBS, fog, alpha blending, smooth shading, motion blur, etc.). Furthermore, the definition of a scene graph containing geometry, sound, and a transformation hierarchy dramatically impacts how efficiently an object can be rendered. In particular, the method of performing graphics state management affects the speed at which 3-D objects can be rendered. Other factors to be considered include rendering optimizations; intersection and pick testing; fields and engines; and data and method extensibility. In addition, the API should be designed with the goal towards minimizing the amount of memory that is consumed for storage. Thus, designing a VRML compliant 3-D graphics API that is efficient, platform-independent, and interactive for rendering high quality 3-D objects is a non-trivial task and demands a thorough understanding, extensive experience, and intimate knowledge of 3-D computer graphics.